//
//  EMBleManager.h
//  EGMLibrary
//
//  Created by apple on 2017/9/27.
//  Copyright © 2017年 egoman. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "SDKScannedPeripheral.h"
#import "SDKPedometerHistoryData.h"
#import "SDKPedometerFlagData.h"
#import "SDKParamData.h"
#import "SDKBatteryData.h"
#import "SDKDeviceInfoData.h"
#import "SDKEventData.h"
#import "SDKHourStepData.h"
#import "SDKHrmBpData.h"
#import "SDKMessageData.h"
#import "SDKTimerHrmBpHistoryData.h"
#import "SDKWeatherData.h"
#import "SDKEcgData.h"
/**
 * 与设备连接状态枚举
 */
typedef enum
{
    SDKConnectionStateDisconnected       = 0,//未连接
    SDKConnectionStateConnected         = 1,//已连接
    SDKConnectionStateReady           = 2,//就绪（可以开始读写设备）
}SDKConnectionState;

/**
 * 手机蓝牙状态监听接口
 */
typedef void (^SDKBluetoothStateChangedBlock)(BOOL isBluetoothOn);
/**
 * 设备连接状态监听接口
 */
typedef void (^SDKConnectionStateChangedBlock)(SDKConnectionState state);
/**
 * 扫描设备结果回调
 */
typedef void (^SDKScanResultBlock)(SDKScannedPeripheral* device);
/**
 * 读取或监听设备数据时的回调接口
 */
typedef void (^SDKDataChangedBlock)( SDKData*  data);



/**
 * 低功耗蓝牙设备管理类
 * 所有与设备交互的方法都封装在这个类中
 */
@interface SDKBleManager : NSObject

@property(nonatomic,assign) __block NSInteger functionFlag;

+(SDKBleManager*)sharedBleManager;

/**
 * 扫描蓝牙低功耗设备
 * @param callback 扫描结果回调
 */
-(void)startScanDevice:(SDKScanResultBlock)block;
/**
 * 停止扫描设备
 */
-(void) stopScanDevice ;
/**
 * 连接设备
 */
-(void) connectDevice:(SDKScannedPeripheral*)peripheral;
/**
 * 断开设备连接
 */
-(void) disconnect ;
-(void) notifyBluetoothStateChanged:(BOOL) isBluetoothOn ;
/**
 * 添加手机蓝牙状态监听
 * @param listener
 */
-(void) addBluetoothStateListener:(SDKBluetoothStateChangedBlock) listener ;
/**
 * 取消手机蓝牙状态监听
 * @param listener
 */
-(void) removeBluetoothStateListener:(SDKBluetoothStateChangedBlock) listener ;
/**
 * 添加设备连接状态监听
 * @param listener
 */
-(void) addConnectionStateListener:(SDKConnectionStateChangedBlock) listener ;
/**
 * 取消设备连接状态监听
 * @param listener
 */
-(void) removeConnectionStateListener:(SDKConnectionStateChangedBlock) listener ;

-(void) notifyConnectionStateChanged:(SDKConnectionState)state ;
/**
 * 读取设备运行标志、功能标志，当天计步步数，当天计步时间，血氧，紫外线强度
 */
-(void) readPedometerFlagData:(void(^)(SDKPedometerFlagData* data))block;
/**
 * 开启计步功能标志notifiy
 */
-(void) startPedometerFlagNotify:(void(^)(SDKPedometerFlagData* data))block;
/**
 * 开启计ECG notifiy
 */
-(void) startECGNotify:(void(^)(SDKEcgData* data))block;

/**
 * 开启计步功能标志notifiy，同时读取一次数据
 */
-(void) startPedometerFlagNotifyAndReadOnce:(void(^)(SDKPedometerFlagData* data))block;
/**
 * 停止计步功能标志notify
 */
-(void) stopPedometerFlagNotify;
/**
 * 读取设备计步、睡眠的历史数据
 */
-(void) readPedometerHistoryData:(void(^)(SDKPedometerHistoryData* data))block;
/**
 * 读取定时检测心率、血压的历史数据
 */
-(void) readTimerHrmHistoryData:(void(^)(SDKTimerHrmBpHistoryData *data))block;
/**
 * 读取设备电量
 */
-(void) readBatteryData:(void(^)(SDKBatteryData* data))block ;
/**
 * 开启设备电量notify,设备电量变化时，数据更新到监听接口：dataListener
 */
-(void) startBatteryNotify:(void(^)(SDKBatteryData* data))block;
/**
 * 开启设备电量notify，同时读取一次设备电量
 */
-(void) startBatteryNotifyAndReadOnce:(void(^)(SDKBatteryData* data))block;
/**
 * 停止设备电量notify
 */
-(void) stopBatteryNotify;
/**
 * 停止设备ECG notify
 */
-(void) stopECGNotify;
/**
 * 开始心率、血压监测
 */
-(void) startDetectHrmBp:(void(^)(SDKHrmBpData* data))block;
/**
 * 停止心率、血压监测
 */
-(void) stopDetectHrmBp;
/**
 * 读取设备mac地址
 */
-(void) readDeviceMacAddress:(void(^)(SDKMac* data))block;
/**
 * 读取设备制造商
 */
-(void) readDeviceManufacturer:(void(^)(SDKManufacturer* data))block;
/**
 * 读取设备产品型号
 */
-(void) readDeviceModel:(void(^)(SDKModel* data))block;
/**
 * 读取设备硬件版本
 */
-(void) readDeviceHardware:(void(^)(SDKHardware* data))block;
/**
 * 读取设备软件版本
 */
-(void) readDeviceSoftware:(void(^)(SDKSoftware* data))block;
/**
 * 读取设备制造商、产品型号、硬件版本、软件版本、mac地址信息
 */
-(void) readDeviceInfo:(void(^)(SDKDeviceInfoData* data))block;
/**
 * 读取当天每小时分别走了多少步
 */
-(void) readHourStepData:(void(^)(SDKHourStepData* data))block;
/**
 * 开启小时步数notify
 */
-(void) startHourStepNotify:(void(^)(SDKHourStepData* data))block;
/**
 * 开启小时步数notify,同时读取一次数据
 */
-(void) startHourStepNotifyAndReadOnce:(void(^)(SDKHourStepData* data))block;
/**
 * 停止小时步数notify
 */
-(void) stopHourStepNotify;
/**
 * 写入单位、身高、体重、年龄、性别、每日目标类型、每日目标值、定时心率检测时间间隔
 */
-(void) writePersonalData:(SDKParamPersonalData*)data;
/**
 * 写入来电提醒、短信提醒、社交app（微信、QQ，Facebook，Twitter，WhatsApp）信息提醒的
 * 设定：是否开启提醒、提醒时间段
 */
-(void) writeReminderData:(SDKParamReminderData*)data;
/**
 * 写入3个闹钟、语言设定
 */
-(void) writeAlarmData:(SDKParamAlarmData*)data;
/**
 * 写入心率血压报警设定、久坐提醒设定
 */
-(void) writeSedentaryData:(SDKParamSedentaryData*)data;
/**
 * 读取所有设定参数
 */
-(void) readAllParameterData:(void(^)(SDKParamData* data))block;
/**
 * 开启事件监听（设备找手机，设备控制手机拍照）
 */
-(void) startEventListener:(void(^)(SDKEventData* data))block;
/**
 * 停止事件监听
 */
-(void) stopEventListener;
/**
 * 让设备进入相机模式
 */
-(void) enterCameraMode:(void(^)(SDKEventData* data))block;
/**
 * 让设备退出相机模式
 */
-(void) exitCameraMode;
/**
 * 让设备震动（找设备）
 */
-(void) startVibrateDevice;
/**
 * 让设备停止震动
 */
-(void) stopVibrateDevice;
/**
 * 写入天气数据
 */
-(void) writeWeatherData:(SDKWeatherData*)data;

@end
